使用 df -h
查看磁盘大小时,发现 docker /var/lib/docker/overlay2
目录将空间占满了。
切换到 /var/lib/docker
后发现 containers 目录很大,进一步使用 du -sh *
排查,发现是容器 json.log 文件过大造成。执行 cat /dev/null > *-json.log
将日志清空即可。
可以使用以下命令,查看所有容器日志的大小:
1
| for d in $(ls -d /var/lib/docker/containers/*); do ls --time-style=long-iso -lh $d/*-json.log | awk -F' *|/' '{printf("%30s\t%s\t%s %s\t%s\n", "'$(docker ps -af id=${d##*/} --format "table {{.Names}}" | tail -1)'", $5, $6, $7, $14) }'; done
|
上面方案属于临时方案,若是使用 docker-compose 则还可以进行如下配置:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| version: '3' services: redis: image: redis:5.0 restart: always container_name: IP20-redis-6378 environment: - TZ=Asia/Shanghai ports: - 6378:6378 volumes: - ./redis.conf:/etc/redis/redis.conf command: redis-server /etc/redis/redis.conf logging: driver: "json-file" options: max-size: "5g"
|
或者直接关闭
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| version: '3' services: redis: image: redis:5.0 restart: always container_name: IP20-redis-6378 environment: - TZ=Asia/Shanghai ports: - 6378:6378 volumes: - ./redis.conf:/etc/redis/redis.conf command: redis-server /etc/redis/redis.conf logging: driver: "none"
|
若是没有使用 docker-compose,则在 docker run 的时候可以添加 -log-driver=none
参数来达到同样的效果。
亦或者修改 /etc/docker/daemon.json
文件,使其全局生效,而不是对单独的项目进行设置。
1 2 3 4 5 6 7 8
| { "registry-mirrors": ["https://docker.mirrors.ustc.edu.cn"], "log-driver": "json-file", "log-opts": { "max-size": "1m", "max-file": "1" } }
|
之后重启 docker 服务即可。不过为了灵活起见还是单独项目设置比较好。
参考:https://ld246.com/article/1576138670804